// PROGRAMA : IDCPC001
// COPIA ORIG. : IDCPCS01
// BIBLIOTECA : SISP
// SISTEMA : INFORMACOES DE SEGURANCA PUBLICA - SISP
// CLIENTE : GEJUSPC - GERENCIA DA JUSTICA, SEGURANCA PUBLICA E
// CIDADANIA / INSTITUTO DE IDENTIFICACAO
// PROGRAMADOR : EDU/FM DATA: 16/06/92
// OBJETIVO : OPCAO: ' '
// OBJETIVO : CONSULTA CADASTRO. OPCOES: 'CNO','CPT','CRG','CPF'
// COPYCODE: IDCCC001.
// ATUALIZACOES DATA
// PROGRAMA : IDCPC001 22/09/1999
// BIBLIOTECA : SISP
// PROGRAMADOR :
// OBJETIVO : ALTERCAO DE TELA E ACERTO DE DATAS PARA O ANO 2000
// EM 01/10/1999
// OBS : ESTE PROGRAMA FOI REESTRUTURADO POR SOLON MIRANDA
package br.com.vti.sisp_sicrim.antigo.controller.programa;

import org.apache.commons.lang3.StringUtils;

import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Idcpc001A;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Idctc001;
import br.com.vti.sisp_sicrim.antigo.model.DidCadastro;
import br.com.vti.sisp_sicrim.antigo.model.Idclc001;
import br.com.vti.sisp_sicrim.antigo.model.SicControle;
import br.com.vti.sisp_sicrim.antigo.model.Tablele;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.Sisgsisp;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Idcpc001 OBJETIVO : OPCAO: ' ' OBJETIVO : CONSULTA CADASTRO. OPCOES: 'CNO','CPT','CRG','CPF' COPYCODE: IDCCC001. *
 * 
 * @author Incode - Data: mai/2014
 * 
 */
@Resource
@Path("/antigo/idcpc001")
public class Idcpc001 {
	// Views utilizadas
	DidCadastro didcad = new DidCadastro();
	DidCadastro vwDidcad = new DidCadastro();
	SicControle vwDvecon = new SicControle();
	// Telas/relatorios utilizados
	Idcpc001A idcpc001A;
	Idctc001 idctc001;
	// Includes utilizados
	Idclc001 idclc001 = new Idclc001();
	Tablele tablele = new Tablele();
	// Areas globais / session
	Sisgsisp sisgsisp;
	// Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();

	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	long numRg = 0;
	Idcpc001 idcpc001Anterior;
	String faseproc = "0";
	int nroReg = 1;

	// CONTROLE DE PAGAMENTO DO RG
	// private String chave = "";
	private String regA = "";

	private Idcpc001A preMapas() {
		idcpc001A = new Idcpc001A(true, sessao);
		idctc001 = new Idctc001(true, sessao);
		idctc001.setDataCorrente(UtilBean.obtemDataDia());
		idctc001.setConf("S");
		idcpc001A.setDataCorrente(UtilBean.obtemDataDia());
		idcpc001A.setNomeClasse(this.getClass().getSimpleName().toUpperCase());

		// Par�grafo: r0()
		return idcpc001A;
	}

	public Idcpc001(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public void executar(Idcpc001A idcpc001A, Idctc001 idctc001) {
		try {
			main(idcpc001A, idctc001);
		} catch (Exception e) {
			ExceptionProgram excp = new ExceptionProgram();
			excp.trataErroSiscerro(e, sessao, this.getClass().getSimpleName());
		}
	}

	private void main(Idcpc001A pidcpc001A, Idctc001 pidctc001) throws Exception {
		if (pidcpc001A == null && pidctc001 == null) {
			primeiraVez = true;
			idcpc001A = preMapas();
			idcpc001A.setNavegar("../idcpc001/executar");
			result.include("idcpc001A", idcpc001A);
			sessao.setAtributo("IDCPC001", this);
			idcpc001A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		} else {
			restaurarEstados(pidcpc001A, pidctc001);
		}

		idcpc001A.receberTela(false, result);
		if (idcpc001A.getOperacao().equals("FIM")) {
			Sispm001 sispm001 = new Sispm001(result, sessao);
			sispm001.executar(null, null, null);
			return;
		}
		if (!UtilBean.funcao.equals(UtilBean.ctt_processa)) {
			idcpc001A.enviarMensagem(null, "");
			sessao.setAtributo("IDCPC001", this);
			result.include("idcpc001A", idcpc001A);
			idcpc001A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		}
		// idcG = "";
		// emi0 = "NAO";
		if (faseproc.equals("1") && idctc001.getConf().equals("N")) {
			faseproc = "0";
			didcad.fecha();
			vwDidcad.fecha();
			sessao.setAtributo("IDCPC001", this);
			result.include("idcpc001A", idcpc001A);
			idcpc001A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		}

		switch (idcpc001A.getOperacao().trim()) {
		case "CRG": {
			if (!idcpc001A.getChave().trim().equals("")) {
				zera();
				didcad.consultaNumeroRg(Long.parseLong(UtilBean.subStr(regA, 0, 13).trim()));
				didcad.fecha();
				if (didcad.totalRegistros() == 0) {
					faseproc = "0";
					idcpc001A.enviarMensagem("chave", "");
					sessao.setAtributo("IDCPC001", this);
					result.include("idcpc001A", idcpc001A);
					idcpc001A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
					return;
				}
			}
			if (idcpc001A.getChave().trim().equals("")) {
				regA = StringUtils.repeat("0", 60);
			}
			// Par�grafo: crg()
			if (vwDidcad.leituraNumeroRgMaiorig(Long.parseLong(UtilBean.subStr(regA, 0, 13).trim()))) {
				maoNaRoda();
				idctc001.setMensagem("");
			} else {
				maoNaRoda();
				idctc001.setMensagem("�ltimo registro - Confirme para iniciar novamente!");
			}
			faseproc = "1";
			break;
		}
		case "CRE": {
			// PESQUISA PELO RENAID
			if (!idcpc001A.getChave().trim().equals("")) {
				didcad.consultaRenaid(UtilBean.subStr(idcpc001A.getChave(), 0, 12));
				didcad.fecha();
				if (didcad.totalRegistros() == 0) {
					faseproc = "0";
					idcpc001A.enviarMensagem("chave", "NUMERO DO RENAID NAO ENCONTRADO");
					sessao.setAtributo("IDCPC001", this);
					result.include("idcpc001A", idcpc001A);
					idcpc001A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
					return;
				}
			}
			// Par�grafo: cre()
			if (idcpc001A.getChave().trim().equals("")) {
				idcpc001A.setChave(StringUtils.repeat(" ", 60));
			}
			//
			if (vwDidcad.leituraRenaidMaiorig(UtilBean.subStr(idcpc001A.getChave(), 0, 12).trim())) {
				maoNaRoda();
				idctc001.setMensagem("");
			} else {
				maoNaRoda();
				idctc001.setMensagem("�ltimo registro - Confirme para iniciar novamente!");
			}
			faseproc = "1";
			break;
		}
		case "CRA": {
			if (!idcpc001A.getChave().trim().equals("")) {
				zera();
				didcad.consultaRegistroAnterior(Long.parseLong(UtilBean.subStr(regA, 0, 13)));
				didcad.fecha();
				if (didcad.totalRegistros() == 0) {
					faseproc = "0";
					idcpc001A.enviarMensagem(null, "");
					sessao.setAtributo("IDCPC001", this);
					result.include("idcpc001A", idcpc001A);
					idcpc001A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
					return;
				}
			}
			// Par�grafo: cra()
			if (idcpc001A.getChave().trim().equals("")) {
				regA = StringUtils.repeat("0", 60);
			}
			//
			if (vwDidcad.leituraRegistroAnteriorMaiorig(Long.parseLong(UtilBean.subStr(regA, 0, 13).trim()))) {
				maoNaRoda();
				idctc001.setMensagem("");
			} else {
				maoNaRoda();
				idctc001.setMensagem("�ltimo registro - Confirme para iniciar novamente!");
			}
			faseproc = "1";
			break;
		}
		case "CNO": {
			// Par�grafo: cno()
			if (vwDidcad.leituraNomeIdentMaiorig(idcpc001A.getChave())) {
				maoNaRoda();
				idctc001.setMensagem("");
			} else {
				maoNaRoda();
				idctc001.setMensagem("�ltimo registro - Confirme para iniciar novamente!");
			}
			faseproc = "1";
			break;
		}
		case "CPT": {
			if (!idcpc001A.getChave().trim().equals("")) {
				zera();
				didcad.consultaNumeroProtocolo(Long.parseLong(UtilBean.subStr(regA, 0, 13)));
				didcad.fecha();
				if (didcad.totalRegistros() == 0) {
					faseproc = "0";
					idcpc001A.enviarMensagem(null, "");
					sessao.setAtributo("IDCPC001", this);
					result.include("idcpc001A", idcpc001A);
					idcpc001A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
					return;
				}
			}
			// Par�grafo: cpt()
			if (idcpc001A.getChave().trim().equals("")) {
				regA = StringUtils.repeat("0", 60);
			}
			//
			if (vwDidcad.leituraNumeroProtocoloMaiorig(Long.parseLong(UtilBean.subStr(regA, 0, 13).trim()))) {
				maoNaRoda();
				idctc001.setMensagem("");
			} else {
				maoNaRoda();
				idctc001.setMensagem("�ltimo registro - Confirme para iniciar novamente!");
			}
			faseproc = "1";
			break;
		}
		case "CPF": {
			if (!idcpc001A.getChave().trim().equals("")) {
				zera();
				didcad.consultaNumeroCpf(Long.parseLong(UtilBean.subStr(regA, 0, 13)));
				didcad.fecha();
				if (didcad.totalRegistros() == 0) {
					faseproc = "0";
					idcpc001A.enviarMensagem(null, "");
					sessao.setAtributo("IDCPC001", this);
					result.include("idcpc001A", idcpc001A);
					idcpc001A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
					return;
				}
			}
			// Par�grafo: cpf()
			if (idcpc001A.getChave().trim().equals("")) {
				regA = StringUtils.repeat("0", 60);
			}
			//
			if (vwDidcad.leituraNumeroCpfMaiorig(Long.parseLong(UtilBean.subStr(regA, 0, 13).trim()))) {
				maoNaRoda();
				idctc001.setMensagem("");
			} else {
				maoNaRoda();
				idctc001.setMensagem("�ltimo registro - Confirme para iniciar novamente!");
			}
			faseproc = "1";
			break;
		}
		default: {
			faseproc = "0";
			praFora();
		}
		}

		if (faseproc.equals("0")) {
			sessao.setAtributo("IDCPC001", this);
			result.include("idcpc001A", idcpc001A);
			idcpc001A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
		} else {
			sessao.setAtributo("IDCPC001", this);
			result.include("idctc001", idctc001);
			idctc001.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
		}
	}

	private void maoNaRoda() throws Exception {
		Idccc001 idccc001 = new Idccc001(result, sessao);
		idctc001 = idccc001.executar(vwDidcad);
		idctc001.setConf("S");
		if (!(idctc001.getOperacao().equals("CRG") || idctc001.getOperacao().equals("CNO") || idctc001.getOperacao().equals("CPT") || idctc001.getOperacao().equals("CPF") || idctc001.getOperacao().equals("CRA") || idctc001.getOperacao().equals("CRE"))) {
			praFora();
		}
	}

	private void praFora() {
		funcoes.sissm001(result, sessao);
	}

	private void zera() {
		regA = UtilBean.moveSubstring(regA, 0, 13, "N", idcpc001A.getChave());
		regA = regA.replace(' ', '0');
	}

	private void restaurarEstados(Idcpc001A pidcpc001A, Idctc001 pidctc001) {
		this.idcpc001Anterior = (Idcpc001) sessao.getAtributo("IDCPC001");
		if (pidcpc001A != null) {
			idcpc001A = pidcpc001A;
		} else {
			idcpc001A = this.idcpc001Anterior.idcpc001A;
		}
		idcpc001A.setSessao(sessao);
		if (pidctc001 != null) {
			idctc001 = pidctc001;
		} else {
			idctc001 = this.idcpc001Anterior.idctc001;
		}
		idctc001.setSessao(sessao);
		this.faseproc = this.idcpc001Anterior.faseproc;
		this.vwDidcad = this.idcpc001Anterior.vwDidcad;
	}
}
